package uy.edu.ort.dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

/**
 *
 * @author 153287-154559
 */
@Entity
@NamedQueries({
    @NamedQuery(name="Cliente.findAll",
                query="SELECT c FROM Cliente c"),
    @NamedQuery(name="Cliente.findById",
                query="SELECT c FROM Cliente c WHERE c.identificador = :ID_CLIENTE"),
}) 
public class Cliente extends EntidadPersistente implements Serializable {
    
    /**
     * String value Nombre.
     */
    @Column(name="NOMBRE", nullable=false)
    private String nombre;
    
    /**
     * String value Dirección.
     */
    @Column(name="DIRECCION")
    private String direccion;
    
    /**
     * String value Identificador del cliente.
     */
    @Column(name="ID_CLIENTE", unique=true)
    private String identificador;
    
    /**
     * String value Telefono.
     */
    @Column(name="TELEFONO")
    private String telefono;
    
    /**
     * String value Pagina.
     */
    @Column(name="PAGINA_WEB")
    private String pagina;

    /**
     * Lista de programas del cliente.
     */
    @OneToMany(mappedBy="cliente")
    private List<Programa> programas;
    
    /**
     * Constructor - Inicializa la lista de programas.
     */
    public Cliente() {
        this.programas = new ArrayList<>();
    }
    
    /**
     * Retorna el nombre del cliente.
     * @return String
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Asigna nombre al cliente.
     * @param nombre 
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Retorna la dirección del cliente.
     * @return String
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * Asigna dirección a un cliente.
     * @param direccion 
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    /**
     * Retorna el identificador del cliente.
     * @return String
     */
    public String getIdentificador() {
        return identificador;
    }

    /**
     * Asigna el identificador al cliente.
     * @param identificador 
     */
    public void setIdentificador(String identificador) {
        this.identificador = identificador;
    }

    /**
     * Retorna el telefono del cliente.
     * @return telefono
     */
    public String getTelefono() {
        return telefono;
    }

    /**
     * Asigna el telefono al cliente.
     * @param telefono 
     */
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    /**
     * Retorna la url de la pagina web del cliente.
     * @return url
     */
    public String getPagina() {
        return pagina;
    }

    /**
     * Asigna la pagina web al cliente.
     * @param pagina 
     */
    public void setPagina(String pagina) {
        this.pagina = pagina;
    }
    
    /**
     * Retorna la lista de programas del cliente.
     * @return lista de programas.
     */
    public List<Programa> getListaProgramas() {
        return this.programas;
    }
    
    /**
     * Asigna una lista de programas al cliente.
     * @param listaProgramas 
     */
    public void setListaProgramas(List<Programa> programas) {
        this.programas = programas;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj == null || obj.getClass() != this.getClass()) {
            return false;
        }
        uy.edu.ort.dominio.Cliente c = (uy.edu.ort.dominio.Cliente) obj;
        
        return this.identificador.equals(c.getIdentificador());
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 61 * hash + Objects.hashCode(this.identificador);
        return hash;
    }
    
    @Override
    public String toString() {
        return "Cliente id: " + this.identificador + " nombre: " +  this.nombre;
    }
        
}
